The present invention relates generally to the field of testing computer system memory stores, and more specifically, to a system and method for testing memory stores in a computer system while an operating system is active.
Conventional schemes for performing diagnostic tests on memory in a computer system are well known. One example of such a scheme is a POST (power on self test) computer program embedded in system memory. POST runs a superficial test on the computer main Random Access Memory (RAM) as well as other system memory store components such as hard disk drives and optical drives. In order to provide a faster booting process and to comply with aggressive start time requirements from a major operating system vendor, the POST testing is typically geared towards establishing the general presence of a memory store, and not to verify all memory locations. Also, POST is limited to the booting process and failures occurring while the operating system is active are not detected.
Other memory store testing schemes include various diagnostic programs typically stored on media such as the computer's hard disk drive or floppy disk. Such diagnostic programs are commercially available for purchase by users, and are employed to detect faults related to computer components, such as memory, video, optical storage, hard disk drive, serial ports and virtual memory. In some instances, the user can select which components on which diagnostic programs should be performed. Typically, diagnostics programs test memory by writing specific data patterns to memory and then reading back these patterns for verification. That is, a deviation from the expected data pattern indicates the portion of memory as being defective.
Memory storage devices such as Random Access Memory (RAM), Flash Memory, and Hard disk drives (HDDs) contain a large amount of capacity that is becoming ever more difficult to test effectively in a reasonably short period of time.
This leaves a user with a choice between optimizing testing for coverage or for time. For example, the user could only test parts of a memory store and make the assumption that the untested portions are functioning properly; the user could also test all memory locations of the store but apply only some test algorithms to them; finally, the user could apply a complete set of tests on all memory locations and take a large amount of time to do so.